package jtracking_server;

import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.HashSet;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableRowSorter;

/*Das ist die Uebersicht der DetailGUI. Sie gibt einen Ueberblick wann welche Einheit von wem wo verwendet wurde.
 * Und aktiviert die Detailansicht DetailGUI
 * (Siehe switch)
 */

 //@author Felix
public class UebersichtsGUI extends javax.swing.JFrame {
      //UebersichtsGUI ist die Übersicht ueber die verschiedenen Einheiten auf denen der Client läuft.
    // geplant ist auch eine "normale" DetailGUI die dann die Details für die einzelne Einheit anzeigt.
    DBManager dbm;

    DBTableModel dbModel;
    private TableRowSorter<DBTableModel> sorter;

    /** Creates new form UebersichtsGUI */




    public UebersichtsGUI(DBManager dbm) {
        this.dbm=dbm;
        this.dbModel=new DBTableModel();
        sorter = new TableRowSorter<DBTableModel>();
        jTable1.setRowSorter( sorter );
        initComponents();
        

    }


    class DBTableModel extends AbstractTableModel

    {

        public DBTableModel() {
            datenabrufen();

        }


        ArrayList<Computer> daten;
        public void datenabrufen() {
            daten = UebersichtsGUI.this.dbm.getAlleComputer();

        }

        public int getRowCount() {
            //returnt Anzahl der Einheiten
            return daten.size();
        }

        public int getColumnCount() {
            return 4;
        }

        public Object getValueAt(int rowIndex, int columnIndex) {

            switch (columnIndex) {
                    case 0: return daten.get(rowIndex).getNeuestesDatenpaket().getHostname();
                    case 1: return daten.get(rowIndex).getNeuestesDatenpaket().getDatum().toString();
                    case 2: return daten.get(rowIndex).getNeuestesDatenpaket().getRaum();
                    case 3: return daten.get(rowIndex).getNeuestesDatenpaket().getUsername();
                    case 4: return daten.get(rowIndex);
            }
            return null;       //Füllt Spalten mit Daten

        }

        @Override
        public String getColumnName(int column) {
            switch(column){
                case 0: return "Einheit";
                case 1: return "Zuletzt verwendet";
                case 2: return "Raum";
                case 3: return "Benutzer";

            }
            return "Datenbank nicht erreichbar"; //Falls nicht auslesbar
        }



    }


    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jSplitPane1 = new javax.swing.JSplitPane();
        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jSeparator1 = new javax.swing.JSeparator();
        jMenu2 = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("JTracking Übersicht");
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosed(java.awt.event.WindowEvent evt) {
                formWindowClosed(evt);
            }
        });

        jLabel1.setText("Für Detailansicht auf Computereintrag doppelklicken");

        jTable1.setModel(dbModel);
        jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTable1MouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jTable1);

        jButton1.setText("Aktualisieren");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jMenuBar1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jMenu1.setText("Verwaltung/Wartung");
        jMenu1.add(jSeparator1);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Hilfe/Kontakt");
        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 88, Short.MAX_VALUE)
                        .addComponent(jButton1))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 432, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jButton1))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 263, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        dbModel.datenabrufen();
        dbModel.fireTableDataChanged();
    }//GEN-LAST:event_jButton1ActionPerformed

    @SuppressWarnings("static-access")
    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable1MouseClicked
        if(evt.getClickCount()==2&&evt.getButton()==MouseEvent.BUTTON1);
        {
            Computer c=(Computer)dbModel.getValueAt(jTable1.getRowSorter().convertRowIndexToModel(jTable1.getSelectedRow()), 4);
            DetailGUI d = new DetailGUI(c);
            detailGuis.add(d);
            d.setVisible(true);
        }
        
    }//GEN-LAST:event_jTable1MouseClicked
    HashSet<DetailGUI> detailGuis = new HashSet<DetailGUI>();
    private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
        detailWindowClosed();
    }//GEN-LAST:event_formWindowClosed

    protected void detailWindowClosed(){

        boolean nochEinsOffen=false;
        for(DetailGUI g:detailGuis) {
            if(g.isVisible()){
                nochEinsOffen=true;
            } else {
                detailGuis.remove(g);
            }
        }
        if(this.isVisible())
            nochEinsOffen=true;
        if(!nochEinsOffen)
            dbm.guiGeschlossen();
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration//GEN-END:variables

}
